package store.lunangangster.engine.impl.entity.mgr;

import java.util.Collection;
import java.util.List;
import store.lunangangster.engine.impl.entity.Entity;
import store.lunangangster.engine.impl.repository.EntityMatcher;

/**
 * 实体管理接口，其中封装了对{@link Entity}实体对基本管理方法，一些具体的方法封装在相应的实现接口中。
 * 例如：{@link DeploymentEntityManager}
 * 
 * @author cwk
 * @version 1.0
 */
public interface EntityManager<T extends Entity> {

  T create();

  void batchInsert(Collection<T> entities);

  void insert(T entity);

  T selectById(String id);

  T selectOne(String statement, Object parameter, EntityMatcher<T> matcher);

  List<T> selectList(String statement, Object parameter, EntityMatcher<T> matcher);

  void delete(String id);

  void delete(T entity);

  void deleteBatch(List<String> ids);
}
